package name.peter.leetcode.daily.alternatinggroup1;

/**
 * 3206. 交替组 I
 * 给你一个整数数组 colors ，它表示一个由红色和蓝色瓷砖组成的环，第 i 块瓷砖的颜色为 colors[i] ：
 *
 * colors[i] == 0 表示第 i 块瓷砖的颜色是 红色 。
 * colors[i] == 1 表示第 i 块瓷砖的颜色是 蓝色 。
 * 环中连续 3 块瓷砖的颜色如果是 交替 颜色（也就是说中间瓷砖的颜色与它 左边 和 右边 的颜色都不同），那么它被称为一个 交替 组。
 *
 * 请你返回 交替 组的数目。
 *
 * 注意 ，由于 colors 表示一个 环 ，第一块 瓷砖和 最后一块 瓷砖是相邻的。
 */
public class Solution {
    public int numberOfAlternatingGroups(int[] colors) {
        if (colors == null || colors.length == 0 || colors.length < 3)
            return 0;
        CircularArray array = new CircularArray(colors);
        int ret = 0;
        for (int i = 0; i < colors.length; i++) {
            int before = array.getBefore(i);
            int thisOne = array.get(i);
            int after = array.getAfter(i);
            if (thisOne != before && thisOne != after)
                ret++;
        }
        return ret;
    }


    public static void main(String[] args) {
        Solution solution = new Solution();
        int[] arr = new int[] {0,1,0,0,1};
        int ret = solution.numberOfAlternatingGroups(arr);
        System.out.println(ret);
    }
}

class CircularArray {
    private int[] intArr;

    private int capbility;

    public CircularArray(int[] intArr) {
        this.intArr = intArr;
        this.capbility = intArr.length;
    }

    public int get(int i) {
        return intArr[i % capbility];
    }

    public int getBefore(int i) {
        int index = (i - 1) % capbility;
        if (index < 0) index = capbility + index;
        return intArr[index];
    }

    public int getAfter(int i) {
        return intArr[(i + 1) % capbility];
    }

}
